//5、使用HashSet集合存储自定义对象，并保证元素的唯一性。步骤如下：
//（1）定义一个Student类，该类包括姓名和年龄两个成员变量，
// 定义一个带有姓名和年龄两个参数的构造方法，
// 重写Object类的toString()方法，其返回值为姓名及年龄字符串；
//（3）为保证加入集合中的元素的唯一性（若Student对象的成员变量都相同，则认为是同一对象），
// 在Student类中重写hashCode()方法和equals（）方法，
// 并将集合中的学生对象遍历输出，要求使用泛型。

package Javacode_5;

public class Student {
    private String name;
    private int age;
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return (name+"   "+age);
    }
    @Override
    public int hashCode(){
        final int prime = 31;
        int result = 1;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        result = prime * result + age;
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)  // 引用相同直接返回true
            return true;
        if (obj == null)  // 参数为null返回false
            return false;
        if (getClass() != obj.getClass())  // 类型不同返回false
            return false;

        Student other = (Student) obj;  // 强制类型转换

        // 比较姓名：先判断是否为null，再比较内容
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;

        // 比较年龄
        if (age != other.age)
            return false;

        return true;
    }
}
